//
//  TKIMMsgDataBaseProtocol.h
//  TKIM
//
//  Created by liupm on 15/11/10.
//  Copyright © 2015年 liupm. All rights reserved.
//
#import <Foundation/Foundation.h>

@protocol TKIMMsgDBProtocol <NSObject>

@optional

/**
 *  @Author lpm, 16-10-10 16:10:37
 *
 *  @brief  缓存一条消息
 *
 *  @param msg 消息
 */
-(void)insertMsg:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-10-29 14:10:24
 *
 *  @brief  缓存多条消息数据
 *
 *  @param msgs 消息数组
 */
-(void)insertMsgs:(NSMutableArray *)msgs;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除一条消息
 *
 *  @param msg  消息
 */
-(void)removeMsg:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除一个用户的消息数据
 *
 *  @param user 用户对象
 */
-(void)removeUserMsg:(TKIMUser *)user;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除一个群的消息
 *
 *  @param room 群
 */
-(void)removeRoomMsg:(TKIMRoom *)room;


/**
 *  @Author lpm, 15-10-29 15:10:45
 *
 *  @brief  删除多条消息
 *
 *  @param msgs 消息数组
 */
-(void)removeMsgs:(NSMutableArray *)msgs;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新一条消息数据
 *
 *  @param msg
 */
-(void)updateMsg:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新多条消息数据
 *
 *  @param msgs 消息数组
 */
-(void)updateMsgs:(NSMutableArray *)msgs;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  通过用户ID查询一个结果集
 *
 *  @param targetId 目标用户ID
 *
 *  @return 消息数组（15条）
 */
-(NSMutableArray *)queryMsgByTargetId:(NSString *)targetId;


/** 根据最大保留时间来删除本地数据
 *
 *  @param targetId 目标用户ID
 *  @param maxDay   最大保留天数
 */
- (void)deleteMsgByTargetId:(NSString *)targetId maxDay:(NSInteger)maxDay;


- (void)deleteMsgByTargetId:(NSString *)targetId withMaxDay:(NSInteger)maxDay;

/**
 *  @Author lpm, 15-12-09 16:12:57
 *
 *  @brief  查询消息结果集
 *
 *  @param uid   目标用户ID
 *  @param count  查询数量
 *
 *  @return 消息数组
 */
-(NSMutableArray *)queryMsgByTargetId:(NSString *)uid  count:(NSInteger)count;


/**
 *  @Author lpm, 16-10-10 16:10:25
 *
 *  @brief  查询一个用户某个渠道消息结果集
 *
 *  @param uid      目标用户ID
 *  @param channel 渠道
 *  @param count   查询数量
 *
 *  @return  消息数组
 */
-(NSMutableArray *)queryMsgByTargetId:(NSString *)uid channel:(NSInteger)channel  count:(NSInteger)count;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  通过消息ID查询某个用户一条消息
 *
 *  @param messageId 消息ID
 *
 *  @return 消息
 */
-(TKIMMessage *)queryMsgById:(NSString *)messageId targetId:(NSString *)targetId;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  通过消息ID查询某个用户一条消息
 *
 *  @param messageId 消息ID
 *
 *  @return 消息
 */
-(TKIMMessage *)queryMsgById:(NSString *)messageId;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  查询某次对话的最后一条消息
 *
 *  @param targetId 目标id
 *
 *  @return 消息
 */
-(TKIMMessage *)queryLastMsgByTargetId:(NSString *)targetId;


/**
 *  @Author lpm, 16-03-26 12:03:13
 *
 *  @brief  查询用户指定条数消息（从用户所有的聊天消息中查询）
 *
 *  @param limit 条数
 *
 *  @return 消息数组
 */
-(NSMutableArray *)queryHisMessage:(NSInteger)limit;


/**
 *  @Author lpm, 16-03-26 12:03:46
 *
 *  @brief  查询包含某个关键字的消息
 *
 *  @param key   关键字
 *  @param limit 条数
 *
 *  @return 消息数组
 */
-(NSMutableArray *)queryHisMessageContain:(NSString *)key limit:(NSInteger)limit;


/**
 *  @Author lpm, 16-03-26 12:03:46
 *
 *  @brief  查询包含某个关键字的消息
 *
 *  @param targetId   用户id
 *  @param key   关键字
 *  @param limit 条数
 *
 *  @return 消息数组
 */
-(NSMutableArray *)queryTargetHisMessage:(NSString *)targetId containKey:(NSString *)key limit:(NSInteger)limit;



/**
 *  @Author lpm, 15-11-26 18:11:44
 *
 *  @brief  异步查询用户指定条数消息
 *
 *  @param limit 条数
 *  @param callBack 回调返回消息数组
 */
-(void)asyncQueryHisMessage:(NSInteger)limit callBack:(void(^)(NSMutableArray *array))callBack;


/**
 *  @Author lpm, 15-11-26 18:11:44
 *
 *  @brief  异步查询包含某个关键字的消息
 *
 *  @param key   关键字
 *  @param limit 条数
 *  @param callBack 回调返回消息数组
 */
-(void)asyncQueryHisMessageContain:(NSString *)key limit:(NSInteger)limit callBack:(void(^)(NSMutableArray *array))callBack;


/**
 *  @Author lpm, 16-03-26 12:03:46
 *
 *  @brief  异步查询包含某个关键字的消息
 *
 *  @param targetId   用户id
 *  @param key   关键字
 *  @param limit 条数
 *
 *  @return 消息数组
 */
-(void)asyncQueryTargetHisMessage:(NSString *)targetId containKey:(NSString *)key limit:(NSInteger)limit callBack:(void(^)(NSMutableArray *array))callBack;


/**
 *  @Author lpm, 15-10-29 15:10:25
 *
 *  @brief  查询多条消息数据（15条）
 *
 *  @param targetId 目标ID
 *  @param callBack 回调返回消息数组
 *
 */
-(void)queryMsgByTargetId:(NSString *)targetId  callBack:(void(^)(NSMutableArray *array)) calBack;


/**
 *  @Author lpm, 15-12-09 16:12:57
 *
 *  @brief  查询消息结果集
 *
 *  @param targetId 目标ID
 *  @param count  查询数量
 *  @param callBack 回调返回消息数组
 *
 */
-(void)queryMsgByTargetId:(NSString *)targetId  count:(NSInteger)count callBack:(void(^)(NSMutableArray *array)) calBack;


/**
 *  @Author lpm, 16-10-10 17:10:19
 *
 *  @brief  异步更新一条消息数据
 *
 *  @param msg      消息
 *  @param callBack 回调
 */
-(void)updateMsg:(TKIMMessage *)msg callBack:(void(^)(TKIMMessage *updateMessage)) callBack;


/**
 *  @Author lpm, 16-04-29 10:04:59
 *
 *  @brief  更新所有的消息发送状态
 *
 *  @param state 状态
 */
-(void)updateAllMsgSendState:(TKIMMsgSendState)state;


/**
 *  @Author lpm, 16-04-29 10:04:59
 *
 *  @brief  更新消息扩展字段
 *
 *  @param msg 消息
 */
-(void)updateMsgExt:(TKIMMessage *)msg;


/**
 *  @Author lpm, 16-04-29 10:04:59
 *
 *  @brief  更新消息的关联ID
 *
 *  @param msg 消息
 */
-(void)updateMsgRefId:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新一条消息的发送状态
 *
 *  @param msg 消息
 */
-(void)updateMsgState:(TKIMMessage *)msg;


/**
 *  @Author lpm, 15-10-29 15:10:46
 *
 *  @brief  更新一条消息时间
 *
 *  @param msg 消息
 */
-(void)updateMsgTime:(TKIMMessage *)msg;


/**
 *  @Author lpm, 16-07-27 17:07:53
 *
 *  @brief  查询某个段之间的数据(用于消息漫游模式)
 *
 *  @param targetId 目标ID
 *  @param startIndex   开始refId
 *  @param endIndex 结束refId
 */
-(NSMutableArray *)queryHisMessageByTargetId:(NSString *)targetId startIndex:(NSInteger)startIndex endIndex:(NSInteger)endIndex;


/**
 *  @Author lpm, 16-07-27 17:07:53
 *
 *  @brief  查询某个段之间的数据(用于消息漫游模式)
 *
 *  @param targetId 目标ID
 *  @param timestamp   开始时间 
 *  @param count   条数
 */
-(NSMutableArray *)queryHisMessageByTargetId:(NSString *)targetId timestamp:(NSTimeInterval)timestamp count:(NSInteger)count;


/**
 *  @Author lpm, 16-07-28 15:07:37
 *
 *  @brief  查询收到的最后一条消息时间
 *
 *  @return 时间戳
 */
-(long)queryLastMsgTime;


/**
 *  @Author lpm, 16-07-27 17:07:53
 *
 *  @brief  查询某个时间之前的数据(用于消息漫游模式)
 *
 *  @param targetId 目标ID
 *  @param beforeTime   开始时间
 *  @param count 结束条数 
 */
-(NSMutableArray *)queryHisMessageByTargetId:(NSString *)targetId beforeTime:(NSString *)time count:(NSInteger)count;


@end

